/*
 * @lc app=leetcode.cn id=8 lang=javascript
 *
 * [8] 字符串转换整数 (atoi)
 */

// @lc code=start
/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function (s) {
  let result = 0;
  let sign = null;
  let isNegative = false;

  for (let i = 0; i < s.length; i++) {
    const char = s[i];

    // 已经开始计算，遇到这三个符号也要停止
    if ((char === ' ' || char === '+' || char === '-') && sign) {
      break;
    }

    if (char === ' ') {
      continue;
    }
    if (char === '+' || char === '-') {
      if (isNaN(Number(s[i + 1]))) {
        break;
      }

      if (char === '-') {
        isNegative = true;
      }

      // 标记已经开始计算
      sign = true;
      continue;
    }

    if (isNaN(Number(char))) {
      break;
    }

    // 标记已经开始计算
    sign = true;
    result = result * 10 + Number(char);
    if (!isNegative && result > Math.pow(2, 31) - 1) {
      return Math.pow(2, 31) - 1;
    }
    if (isNegative && result * -1 < -Math.pow(2, 31)) {
      return -Math.pow(2, 31);
    }
  }

  return result * (isNegative ? -1 : 1);
};
// @lc code=end

// @after-stub-for-debug-begin
module.exports = myAtoi;
// @after-stub-for-debug-end
